透過使用設定流程,可以取得到證明者和驗證者的公共參數。
如果一個電路有數量為 d 的門,則多項式最多有 d 次數(degree)。需要注意的是,如果驗證者希望能夠驗證證明,則需要有足夠的時間來讀取相關電路。
當驗證者讀取電路時,就表示驗證者演算法需要在電路大小的線性時間內執行,所以這會是一個大問題。
另外在應用中,處理的多項式可能會很大,有機會可以達到10億次方之類。
如果我們讓驗證者在電路大小的線性時間內執行,這就不會有一個簡潔證明的效果,換言之,就不是SNARK了。
要做到 SNARK 的標準,就需要讓驗證者演算法在電路大小的對數時間內運作。
但以對數時間運作就表示驗證者甚至不知道電路到底是什麼樣子!這怎麼可能?
由於多項式的次數可以與電路的大小(門的數量)相對應,所以我們不能讓驗證器只讀取多項式的係數來理解它。
我們需要給他一個總結,讓驗證者只在一個點上評估多項式。該點由驗證者自己隨機選擇。
這是必要的,因為如果我們想要一個簡潔的證明,評估證明大小和驗證者時間就需要是多項式次數的對數。
更具體地說,我們需要一些可以作為電路總結的參數。為此,我們需要使用多項式承諾方案讓證明者透過使用非常短的字串來提交多項式證明(承諾)。
預處理步驟很重要,因為它是為證明者和驗證者產生參數的演算法,並允許驗證者在電路 C 大小的對數時間內運行。
更準確地說,通過預處理的步驟,驗證器可以對電路進行總結並驗證任意點的評估,而無需了解電路的完整描述。
預處理步驟涉及一種演算法,而該演算法將電路和一些隨機值作為輸入的參數。
透過這個初始設定,可以創建一個非常短的電路總結(會是一個字串),並讓驗證者能夠透過該字串知道電路總結。
這樣預處理允許驗證者在電路大小的對數時間內讀取電路。
預處理參數系統採用 3 種演算法: 分別是設定演算法、驗證演算法、證明演算法。當正在輸入時,證明者會採用證明者的公共參數、證人和聲明。
驗證者取得驗證者的公共參數、證明和聲明。
要建立設置,需要有以下設定:
當完成所有設定,就可以正式進入下一步。